"""
模块名称：example_recording.py
作者：冯满德
创建时间：2025 - 11 - 05
最后修改时间：2025 - 11 - 05
功能描述：文件录音及播放工具类，封装录音和播放功能，录音结束不自动播放，需手动调用播放方法
"""

import utime
import audio
from machine import Pin

class FileRecording:
    """文件录音播放工具类"""
    def __init__(self, audio_dev=0, volume=7):
        """初始化"""

        # 录音状态标志（1：录音中，0：结束/失败）
        self.flag = 1
        # 录音文件名（用于后续播放时获取路径）
        self.record_filename = None
        # 初始化音频、TTS、录音对象
        self.aud = audio.Audio(audio_dev)
        self.tts = audio.TTS(audio_dev)
        self.record = audio.Record()
        # 设置音量
        self.aud.setVolume(volume)
        # 绑定录音回调函数
        self.record.end_callback(self.__record_callback)

    def __record_callback(self, args):
        global flag
        print('file_name:{}'.format(args[0]))
        print('file_size:{}'.format(args[1]))
        print('record_sta:{}'.format(args[2]))

        record_sta = args[2]
        if record_sta == 3:
            print('The recording is over, play it')
            self.tts.play(1, 0, 2, '录音结束,准备播放录音文件')
            self.aud.play(1, 0, self.record.getFilePath('recordfile.wav'))
            flag = 0
        elif record_sta == -1:
            print('The recording failure.')
            self.tts.play(1, 0, 2, '录音失败')
            flag = 0

    def record_audio(self, filename='recordfile.wav', duration=10):
        """录音方法"""

        self.tts.play(1, 0, 2, '录音开始')
        self.flag = 1  # 重置录音状态
        self.record_filename = filename  # 提前保存文件名
        print('开始录音，时长{}秒...'.format(duration))

        self.record.start(filename, duration)
        # 等待录音结束
        while self.flag:
            utime.sleep_ms(200)




if __name__ == "__main__":

    audio_tool = FileRecording()
    audio_tool.record_audio()

